2.1 功能权限

功能权限是控制用户能访问哪些页面,能访问页面上的哪些组件(按钮、输入框、表格列、标签页等)。作用于前端页面。

功能权限主要分为页面权限和界面权限这两类。

1.页面权限

页面权限是对页面这个层级访问的控制,可以限制用户是否能访问这个页面。可以通过新建角色并分配功能权限来开启对本页面的访问。

(1)实现原理

数据库表写入

新建页面后,默认会在门户的数据库表中自动插入1条本页面的访问权限,但未指定角色。角色分配权限后,会自动新插入1条本页面的访问权限,并同时指定角色。

开发时设置写入的是门户的permission_debug表,运行时设置写入的是permission表。

其中code会描述是访问哪个页面文件,name为用户自定义的名称,type为menu(指功能权限),role_id如果未分配给角色则为空。例如:

1660648822168

访问约束

  • 前端约束

当配置好权限,并分配给角色、授权给用户后,在门户显示页面菜单时,会判断登录的用户是否拥有该访问权限,如果不存在,则页面菜单不会显示出该页面。

  • 后端约束

如果用户绕过页面菜单,直接访问页面的链接,则后端会进行判断并提示访问无权限,避免绕开前端的漏洞。

(2)实现效果

以功能权限页面为例,功能权限功能会自动加入该页面权限,如下图所示:

1660185148028

设置权限后的访问效果如下:

  • 有页面访问权限

1660110077644

  • 无页面访问权限

门户菜单没有出现“功能权限”页面。

1660110250368

  • 绕过页面菜单直接访问页面链接

页面上会提示页面权限不足。

1660650795764

2.界面权限

界面权限是对页面上的组件这个层级访问的控制,可以限制只读或者隐藏相关组件,组件包括页面上加入的所有组件,比如文本、按钮、输入框、表格列、标签页等。

使用本功能需要从组件市场下载界面权限组件,并把界面权限组件、用户组件、上下文组件这3个组件同时加到页面中。

(1)实现原理

数据库表写入

新建界面权限后,默认会在门户的数据库表中自动插入1条权限,但未指定角色。角色分配权限后,会自动新插入1条同样的权限,并同时指定角色。

开发时设置写入的是门户的permission_debug表,当微服务注册到门户后,会写入到permission表中。

其中code会描述是哪个页面文件的权限标识,比如权限标识是gnqxymtabledisplay。name为用户自定义的名称,type为ui(指界面权限),debug_type为insert,role_id如果未分配给角色则为空。例如:

1660701033289

界面权限判断

当前端页面放置了界面权限组件后,平台会根据用户是否有授权的界面权限,来控制页面组件的只读、隐藏属性。

以以下配置为例,页面会根据权限标识(gnqxymtabledisplay),找到组件(tableColumn2),如果访问的用户没有该权限,则该组件设置为prop属性(hidden或者readonly),例如:

<item comps="tableColumn2" compsname="tableColumn2" id="default21" op="oneOf" permissions="gnqxymtabledisplay" permissionsname="功能权限页面表格列显示权限" prop="hidden"/>

(2)实现效果

界面权限配置如下:

1660190085722

访问效果如下:

  • 有访问权限

1660110505268

  • 无访问权限

具体表现为:

1、输入框和操作按钮为只读,操作不了;

2、发布者这列被隐藏了;

3、标签页中的“有权限用户可见”这个页签被隐藏了;

1660110571190

results matching ""

    No results matching ""

    results matching ""

      No results matching ""